package classe.grafica;
//Fazer função de teste de usuarios repetidos
import classes.adjuntas.AuxiliarContatos;
import classes.gerais.*;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;

public class Principal extends javax.swing.JFrame {
        
    private ArrayList<Contato> Contatos;                                        //Contatos - Array list que guardará todos os contatos
    private DefaultListModel Modelo;                                            //Modelo - Modelo de uma lista (componente)
    private Favoritos PaginaF;                                                  //PaginaF - Página de favoritos que será aberta
    private AuxiliarContatos Suporte;                                           //Suporte - Gerenciamento de contatos
    
    public Principal() {                                                        //Montador que inicializa a clase
        initComponents();                                                       //Inicializa os componentes
        this.Contatos = new ArrayList();                                        //Inicializa o array list
        this.Modelo = new DefaultListModel();                                   //Inicializa o modelo da lista (componente)
        this.Suporte = new AuxiliarContatos();                                  //Inicializa o gerenciador de contatos
        this.PaginaF = null;                                                    //Anula a página de favoritos
        ListCContatos.setModel(Modelo);                                         //Coloca o modelo na lista (componente)
        ListCContatos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);    //Permite apenas uma seleção na lista (componente)
    }
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        SPCContatos = new javax.swing.JScrollPane();
        ListCContatos = new javax.swing.JList();
        LCContatos = new javax.swing.JLabel();
        LCCabeçalho = new javax.swing.JLabel();
        BCExcluir = new javax.swing.JButton();
        BCFavoritos = new javax.swing.JButton();
        BCInserir = new javax.swing.JButton();
        BCChat1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("CER - Principal");

        SPCContatos.setViewportView(ListCContatos);

        LCContatos.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        LCContatos.setText("Contatos");

        LCCabeçalho.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
        LCCabeçalho.setText("CER - Comunicação");

        BCExcluir.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        BCExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/classe/grafica/minus white.png"))); // NOI18N
        BCExcluir.setText("Excluir");
        BCExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BCExcluirActionPerformed(evt);
            }
        });

        BCFavoritos.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        BCFavoritos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/classe/grafica/users.png"))); // NOI18N
        BCFavoritos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BCFavoritosActionPerformed(evt);
            }
        });

        BCInserir.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        BCInserir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/classe/grafica/plus.png"))); // NOI18N
        BCInserir.setText("Inserir");
        BCInserir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BCInserirActionPerformed(evt);
            }
        });

        BCChat1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        BCChat1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/classe/grafica/iChat.png"))); // NOI18N
        BCChat1.setText("Chat");
        BCChat1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BCChat1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(SPCContatos, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(BCInserir)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(BCChat1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(BCFavoritos, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(BCExcluir, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addGap(18, 18, 18))
            .addGroup(layout.createSequentialGroup()
                .addGap(134, 134, 134)
                .addComponent(LCCabeçalho)
                .addGap(0, 0, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addGap(164, 164, 164)
                .addComponent(LCContatos)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(LCCabeçalho)
                .addGap(30, 30, 30)
                .addComponent(LCContatos)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(BCInserir, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(BCExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(BCFavoritos, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(BCChat1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(SPCContatos))
                .addGap(28, 28, 28))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents
    
    private void BCFavoritosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BCFavoritosActionPerformed
        if (PaginaF == null){                                                   //Se a página de favoritos não existir...
            PaginaF = new Favoritos();                                          //Cria ela
        }
        PaginaF.setLocationRelativeTo(null);                                    //Centraliza a tela
        PaginaF.show();                                                         //Mostra a tela
    }//GEN-LAST:event_BCFavoritosActionPerformed

    private void BCInserirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BCInserirActionPerformed
        String Nome, IP, Porta;                                                 //Elementos do contatos
        Nome = null;                                                            //Inicializa como null
        IP = null;                                                              //Inicializa como null
        Porta = null;                                                           //Inicializa como null
        
        Nome = (String) JOptionPane.showInputDialog("Digite o Nome:");                                                                              //Pede o nome do contato
        while (Suporte.VerificarNome(Nome, Contatos)==false) Nome = (String) JOptionPane.showInputDialog("(Nome já esxistente) Digite o Nome:");    //Verifica se o nome já existe através de um método de suporte
        if (Nome != null){                                                                                                                          //Se o nome for válido...
            IP = (String)JOptionPane.showInputDialog("Digite o IP (###.###.#.##):");                                                                //Pede o IP do contato
            if (IP != null){                                                                                                                        //Se houve rum IP...
                Porta = (String)JOptionPane.showInputDialog("Digite a porta de acesso(1030 a 5000):");                                              //Pede a porta
                if (Porta != null){                                                                                                                 //Se a porta existir...
                    Porta = Suporte.GerenciaPorta(Porta, 1030, 5000, Contatos);                                                                     //Verifica se a porta é válida através do suporte
                    if (Porta != null){                                                                                                             //Se foi digitada uma porta válida...
                        Contato Novo = new Contato (Nome, IP, Integer.parseInt(Porta));                                                             //Cria o contato
                        Contatos.add(Novo);                                                                                                         //Adiciona no array list de contatos
                        Modelo.addElement(Nome);                                                                                                    //Adicona o nome na lista (componente)
                    }
                }
            }
        }     
    }//GEN-LAST:event_BCInserirActionPerformed

    private void BCExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BCExcluirActionPerformed
        String Deletar;                                                         //Guardará o elemento a ser deletado
        
        Deletar = (String) ListCContatos.getSelectedValue();                    //Recolhe o elemento a ser deletado
        
        for (Contato Busca : Contatos){                                         //Para todo contato existente em contatos...
            if (Busca.DevolveNome().equals(Deletar)){                           //Se o elemento for o buscado
                Suporte.RemoverChat(Busca);                                     //Pede pro suporte remover a conexão com o contato
                Contatos.remove(Busca);                                         //Deleta o contato
                break;                                                          //Para o laço
            }
        }
        
        Modelo.removeElement(Deletar);                                          //Retira da lista (componente)
    }//GEN-LAST:event_BCExcluirActionPerformed

    private void BCChat1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BCChat1ActionPerformed
      String Elemento;                                                          //Guardará o elemento que se quer iniciar o chat
      Contato Busca = null;                                                     //Busca do contato para o chat
      Chat TelaChat;                                                            //Tela do chat
      
      Elemento = (String) ListCContatos.getSelectedValue();                     //Pega o elemento selecionado para iniciar a conexão
      
      if (Elemento != null){                                                    //Se o elemento existir...
      for (Contato BuscaL : Contatos){                                          //Para todo o contato existente em contatos...
            if (BuscaL.DevolveNome().equals(Elemento)){                         //Se for o elemento buscado...
                Busca = BuscaL;                                                 //Referencia o contato
                break;                                                          //Para o laço
            }
        }
      
      try {                                                                     //Tente executar...
        TelaChat = Suporte.ExistenciaContatoChat(Busca);                        //Verifica se a conexão já existe
        if (TelaChat != null){                                                  //Se sim...
            TelaChat.setVisible(true);                                          //Abre o chat
        }
        else {                                                                  //Se não...
            TelaChat = new Chat(Busca);                                         //Inicia uma nova janela de chat
            Suporte.InserirChat(TelaChat);                                      //Insere a janela de chat no gerenciador
            TelaChat.setLocationRelativeTo(null);                               //Centraliza a janela
            TelaChat.show();                                                    //Abre a janela
        }
      }
      catch (Exception e){                                                      //Se houver excessão...
          System.out.println("Contato não encontrado!!");                         //Notifica
      }
      }
    }//GEN-LAST:event_BCChat1ActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton BCChat1;
    private javax.swing.JButton BCExcluir;
    private javax.swing.JButton BCFavoritos;
    private javax.swing.JButton BCInserir;
    private javax.swing.JLabel LCCabeçalho;
    private javax.swing.JLabel LCContatos;
    private javax.swing.JList ListCContatos;
    private javax.swing.JScrollPane SPCContatos;
    // End of variables declaration//GEN-END:variables
}
